/*
 * MConfiguracionBalance.java
 *
 * Created on 12 de diciembre de 2006, 11:05 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package ig.metrica.ui.confBalance;

//import ig.metrica.ModeloPK;
import ig.metrica.ModeloSBean;
import ig.metrica.ejb.conbalance.ConfiguracionBalanceSBBean;
import ig.metrica.ejb.conbalance.ConfiguracionbalancesDTO;
import ig.metrica.origenesdedatos.OrigenDeDatosBean;
import ig.metrica.origenesdedatos.OrigenesdatosDTO;
import ig.metrica.ui.ServiceLocator;
import ig.metrica.ui.interfaces.comunes.IModelo;
import ig.metrica.ui.modelo.ExceptionEnConsulta;
import ig.util.NoContinuaException;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.ArrayList;

/**
 *
 * @author jsanchez
 */
public class MConfiguracionBalance implements IModelo {
    private PConfiguracionBalance panel=null;
    private Integer idModelo=null;
    private String nombre=null;
//    private Modelo modelo=null;
    /** Creates a new instance of MConfiguracionBalance */
    public MConfiguracionBalance(PConfiguracionBalance panel) {
        this.panel=panel;
    }
    
    public void guardar() throws NoContinuaException {
        try {            
            Collection cc_=new ArrayList();
            Object[][] data=panel.getData();            
            for (int i = 0; i < data.length; i++) {
                ConfiguracionbalancesDTO dto=new ConfiguracionbalancesDTO();
                dto.setIdmodelo(this.idModelo);
                for (int j = 0; j < 3; j++) {
                    if(data[i][j]!=null && !data[i][j].toString().trim().equals("")){
                        if(j==0)
                            dto.setPuc(Integer.valueOf(data[i][j].toString()));
                        else if(j==1 && !data[i][j].toString().trim().equals(""))
                            dto.setProcentaje(Integer.valueOf(data[i][j].toString()));
                        else if(j==2 && !data[i][j].toString().trim().equals(""))
                            dto.setDuracion(Integer.valueOf(data[i][j].toString()));
                    }
                }
                if(dto.getDuracion()!=null && dto.getProcentaje()!=null && dto.getPuc()!=null)
                    cc_.add(dto);
            }
            this.lookupConfiguracionBalanceSBBean().eliminar(idModelo);
            this.lookupConfiguracionBalanceSBBean().crear(cc_);
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
            throw new NoContinuaException("El porcentaje y el numero de dias deben ser numericos\n"+ex.toString());
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new NoContinuaException(ex.toString());
        }
        try{
            panel.setNombreModelo(this.nombre);
        } catch (ExceptionEnConsulta ex) {
            ex.printStackTrace();
        } catch (Exception ex) {
                throw new NoContinuaException(ex);
        }
    }
    
    private Collection cc=null;
    public Collection buscar() throws NoContinuaException {
        try {
            CConfBalance=this.lookupConfiguracionBalanceSBBean().findByModelo(this.idModelo);
//            System.out.println("CConfBalance:1"+CConfBalance);
        } catch (Exception ex) {
            throw new NoContinuaException(ex.toString());
        }
        return CConfBalance;
    }
    
    public Collection    getPUC() {
        return PUC;
    }
    
    public void modificar() throws NoContinuaException {
    }
    
    public void nuevo() throws NoContinuaException {
    }
    
    public void eliminar() throws NoContinuaException {
    }
    
    public void salir() throws NoContinuaException {
    }
    
    public void imprimir() throws NoContinuaException {
    }
    
    public Object getTO() throws NoContinuaException {
        return null;
    }
    
    public void cancelar() throws NoContinuaException {
    }
    
    public void setNombreModelo(String nombre)throws ExceptionEnConsulta,Exception{
        this.nombre=nombre;
        this.idModelo=this.lookupModeloSBean().findByNombre(nombre).getId();
    }
    
    //ig.metrica.ModeloSRemote modeloSB=null;
    private ig.metrica.ModeloSBean lookupModeloSBean() {
        return new ModeloSBean();
        /*try {
            if(modeloSB==null){
                Properties prop = new Properties();
                prop.put( Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
                String Sockec = new ConexionServer().getSocketServer();
                prop.put( Context.PROVIDER_URL, Sockec);
                
                javax.naming.Context c = new javax.naming.InitialContext(prop);
                Object _remote = c.lookup("ModeloSBean");
                ig.metrica.ModeloSRemoteHome rv = (ig.metrica.ModeloSRemoteHome) javax.rmi.PortableRemoteObject.narrow(_remote, ig.metrica.ModeloSRemoteHome.class);
                modeloSB =rv.create();
            }
            return modeloSB;
        } catch(javax.naming.NamingException ne) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ne);
            throw new RuntimeException(ne);
        } catch(javax.ejb.CreateException ce) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ce);
            throw new RuntimeException(ce);
        } catch(java.rmi.RemoteException re) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,re);
            throw new RuntimeException(re);
        }*/
    }
    
    private String Query=null;
    private Integer mapeoPuc= null;    
    public void cargarContratosSimples()throws ExceptionEnConsulta,Exception{

        try {
            Collection ClibroCuentasProductos = new OrigenDeDatosBean().ejbFindByAll();
            Hashtable ht= new Hashtable();
            ht.put("MODELO",nombre.trim());
            for (Object elem: ClibroCuentasProductos) {
                if(((OrigenesdatosDTO)elem).getEntidad().trim().equals("CONTRATOSSIMPLES")){
                    ArrayList datos = null;
                    if(Query==null){
                        OrigenDeDatosBean origenDeDatosBean = new OrigenDeDatosBean();
                        origenDeDatosBean.setOrigenesdatosDTO(((OrigenesdatosDTO)elem));
                        datos = origenDeDatosBean.obtenerDatos(ht);
                        mapeoPuc= 2;//((OrigenDeDatos)elem).getArregloCampos().indexOf("IDCONTRATO");
                        Query=null;
                        break;
                    }else if(Query!=null){
                        OrigenDeDatosBean origenDeDatosBean = new OrigenDeDatosBean();
                        origenDeDatosBean.setOrigenesdatosDTO(((OrigenesdatosDTO)elem));
                        datos = origenDeDatosBean.obtenerDatos(Query);
                        mapeoPuc= 0;
                        break;
                    }
                    Iterator i = datos.iterator();
                    while(i.hasNext()){
                        Object[] registro = (Object[])i.next();
                        PUC.add(registro[mapeoPuc]);
                    }
                }
            }
        } catch (SQLException e) {
//            e.printStackTrace();
//            String mensaje=
//                    "Para facilitar la configuracion de balances,  se le puede asignar la lista de Contratos.\n"+
//                    "Se intento ejecutar la consulta asociada  al origende datos : CONTRATOSSIMPLES\n"+
//                    "y retorno el siguiente error:\n["+
//                    e.getMessage()+"]\n\n"+
//                    "Puede digitar una nueva Consulta para traer los datos, la primera columna del resultado\n" +
//                    "debe ser el Identificador del Contrato";
//            String valor=JOptionPane.showInputDialog(this.panel,mensaje);
//            if(valor!=null && !valor.trim().equals("")){
////                char[] c=Query.toCharArray();
////                for (int i = 0; i < c.length; i++) {
////                    if(c[i]=='$')
////                        c[i]='_';
////                    if(c[i]=='{' || c[i]=='}')
////                        c[i]='/';
////                }
////                Query=new String(c);
////                Query=Query.replaceAll("_/FECHA_CORTE/","{d'"+valor.trim()+"'}");
//                Query=valor.trim();
//                this.cargarContratosSimples();
//            }
        }
    }
    public Collection getConfiBalance(){
        return this.CConfBalance;
    }
    Collection PUC= new ArrayList();
    Collection CConfBalance= new ArrayList();
    //ConfiguracionBalanceSBRemote remote =null;
    private ConfiguracionBalanceSBBean lookupConfiguracionBalanceSBBean() {
        return new ConfiguracionBalanceSBBean();
        /*try {
            if(remote==null){
                Properties prop = new Properties();
                prop.put( Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
                
                String Sockec = new ConexionServer().getSocketServer();
                prop.put( Context.PROVIDER_URL, Sockec);
                InitialContext c = new InitialContext(prop);
                remote=((ConfiguracionBalanceSBRemoteHome) c.lookup("ConfiguracionBalanceSBBean")).create();
            }
            return remote;
        } catch(javax.naming.NamingException ne) {
            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ne);
            throw new RuntimeException(ne);
        } catch(javax.ejb.CreateException ce) {
            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ce);
            throw new RuntimeException(ce);
        } catch (RemoteException ce) {
            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ce);
            throw new RuntimeException(ce);
        }*/
    }
}
